#ifndef INCOME_CHART_WIDGET_H
#define INCOME_CHART_WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QTimer>
#include <QDateTime>
#include <QPointF>
#include <QList>
#include <QString>
#include <QResizeEvent>

class IncomeChartWidget : public QWidget
{
    Q_OBJECT

public:
    explicit IncomeChartWidget(QWidget *parent = nullptr);
    
    // 数据更新方法
    void updateChart(const QStringList &labels, const QList<double> &values);
    void addDataPoint(const QString &label, double value);
    void clearData();
    
    // 配置方法
    void setTitle(const QString &title);
    void setTimeRange(int hours = 24); // 显示时间范围（小时）
    void setMaxDataPoints(int maxPoints = 50);
    
    // 动画控制
    void setAnimationEnabled(bool enabled);
    void setRefreshInterval(int intervalMs);

protected:
    void paintEvent(QPaintEvent *event) override;
    void resizeEvent(QResizeEvent *event) override;

private slots:
    void onTimerTimeout();

private:
    // 绘制方法
    void drawBackground(QPainter &painter);
    void drawGrid(QPainter &painter);
    void drawAxes(QPainter &painter);
    void drawData(QPainter &painter);
    void drawLegend(QPainter &painter);
    void drawTitle(QPainter &painter);
    
    // 数据处理
    double normalizeValue(double value);
    QPointF dataPointToScreen(const QString &label, double value);
    void calculateBounds();
    
    // 样式配置
    void updateColors();
    
    // 成员变量
    QStringList m_labels;
    QList<double> m_values;
    QString m_title;
    
    // 图表配置
    int m_timeRange;        // 时间范围（小时）
    int m_maxDataPoints;    // 最大数据点数
    bool m_animationEnabled;
    int m_refreshInterval;
    
    // 图表区域
    QRect m_chartRect;
    QRect m_legendRect;
    int m_marginLeft;
    int m_marginRight;
    int m_marginTop;
    int m_marginBottom;
    
    // 数据范围
    double m_minValue;
    double m_maxValue;
    double m_valueRange;
    
    // 动画相关
    QTimer *m_animationTimer;
    double m_animationProgress;
    QList<double> m_animatedValues;
    
    // 颜色配置
    QColor m_backgroundColor;
    QColor m_gridColor;
    QColor m_axisColor;
    QColor m_dataColor;
    QColor m_textColor;
    QColor m_titleColor;
    
    // 图表样式
    int m_lineWidth;
    int m_pointRadius;
    bool m_showPoints;
    bool m_showGrid;
    bool m_showLegend;
};

#endif // INCOME_CHART_WIDGET_H